/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.Candidato;
import com.ipartek.formacion.gestformwww.modelo.beans.Empresa;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.Procedencia;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Curso
 */
public class MostrarCandidatoAccion implements Accion {

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        // Iniciamos las variables con las que vamos a trabajar
        HttpSession sesion = request.getSession(false);
        AccionRouter router = null;
        ArrayList candidatos = null;
        FiltroCandidato filtro = null;
        int numPags = 0;
        int numerocandidatos = 0;
        ArrayList<Empresa> listaEmpresas = null;
        ArrayList<Procedencia> listaProcedencias = null;
        // Cargamos el mapeo de acciones
        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        // Instanciamos la capa de modelo para el acceso a la BBDD
        ModeloCandidato modelo = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");
        // Comprobamos si el usuario existe
        if (sesion.getAttribute("usuario") != null) {
            //int idCon = (Integer)(request.getAttribute("idCon"));
            
            //idCon = Integer.parseInt(request.getParameter("idCon"));
            // Comprobamos si existe filtro

             if (sesion.getAttribute("filtrocandidatos") != null) {
                 // Si existe, lo cargamos
                  filtro = (FiltroCandidato) sesion.getAttribute("filtrocandidatos");
            } else {
                // Si no existe, creamos un filtro vacio
                filtro = new FiltroCandidato(bundle);

                filtro.setBundle(bundle);
            }
            filtro.setConvId(0 );
            if ((request.getParameter("filtroDNICandidato")!=null))
                filtro.setCanNIF(request.getParameter("filtroDNICandidato"));
            if ((request.getParameter("filtroNombreCandidato")!=null))
                filtro.setNom(request.getParameter("filtroNombreCandidato"));
            if ((request.getParameter("filtroApe1Candidato")!=null))
                filtro.setApe1(request.getParameter("filtroApe1Candidato"));
            if ((request.getParameter("filtroApe2Candidato")!=null))
                filtro.setApe2(request.getParameter("filtroApe2Candidato"));
            if ((request.getParameter("filtroTlf1Candidato")!=null))
                filtro.setTlf1(request.getParameter("filtroTlfn1Candidato"));
            if ((request.getParameter("filtroTlf2Candidato")!=null))
                filtro.setTlf2(request.getParameter("filtroTlfn2Candidato"));
            if ((request.getParameter("filtroOrden")!=null))
                filtro.setOrden(request.getParameter("filtroOrden"));
            if ((request.getParameter("filtroColumna")!=null))
                filtro.setColumnaFiltrar(request.getParameter("filtroColumna"));
            if ((request.getParameter("filtrocanActivo")!=null))
                filtro.setActId(request.getParameter("filtrocanActivo"));
            if ((request.getParameter("RegistroPagina")!=null))
                filtro.setElementospag(request.getParameter("RegistroPagina"));
            if ((request.getParameter("id")!=null))
                filtro.setPagsiguiente(request.getParameter("id"));
            if ((request.getParameter("filtrocanActivo")!=null))
                 filtro.setActId(request.getParameter("filtrocanActivo"));

            sesion.setAttribute("filtrocandidatos", filtro);
           // Recogemos el orden de la consulta
            if (request.getParameter("orden")!=null){
                filtro.setOrden(request.getParameter("orden"));
            }
             // Recogemos el campo por el que se ordenará la consulta
            if (request.getParameter("columna")!=null){
                filtro.setColumnaFiltrar(request.getParameter("columna"));
            }

            // Creamos el array de candidatos
            candidatos = new ArrayList <Candidato>();
            try {
                // y cargamos dicho array con la consulta de la BBDD
                candidatos = modelo.mostrarCandidatos(filtro);
                // Contamos el numero de candidatos de la consulta
                numerocandidatos = modelo.contarCandidatos(filtro);
                // Rellenamos las listas para los filtrados
                listaEmpresas = modelo.listaEmpresas();
                listaProcedencias = modelo.listaProcedencias();

            } catch (GestorFormacionExcepcion ex) {
                // si ocurre una excepcion, la capturamos
                Logger.getLogger(MostrarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                sesion.setAttribute("excepciones", ex.getMessage());
            }
            // Cargamos el array en la variable de peticion
            request.setAttribute("listaCandidatos", candidatos);
            request.setAttribute("listaempresas", listaEmpresas);
            request.setAttribute("listaprocedencias", listaProcedencias);
            // Recogemos el numero de paginas de la consulta
            numPags = filtro.getElementospag();

            if (numerocandidatos == 0) {
                ResourceBundle errores = (ResourceBundle) servlet.getServletContext().getAttribute("errores-mapeo");
                request.setAttribute("error", errores.getString("error-sin-resultados"));
            }

            request.setAttribute("numeroCandidatos", numerocandidatos);
            int totalpaginas = numerocandidatos / numPags;
            if ((numerocandidatos % numPags) != 0) {
                totalpaginas++;
            }
            request.setAttribute("totalPagCandidatos", totalpaginas);

            // Definimos el destino de la peticion
            //request.setAttribute("contenido", "lista-candidatos");
            request.setAttribute("contenido", "mostrar-candidato");
            request.setAttribute("idCon", null);
            router = new AccionRouter("principal");
        } else {
            // Si no existe el usuario, lo mandamos al inicio de la aplicacion
            router = new AccionRouter("inicio", false);
        }
        // Devolvemos el destino
        return router;
    }
}
